#ifndef PID_H
#define PID_H
#include "INC.h"

typedef struct{
	float Kp;
	float Ki;
	float Kd;
	
	float err;        // 当前误差
	float err_total;
	float err_last;
	float err_last2;
	float target;
	float output;
}PID_Para;

typedef struct pid_t
{
  float Kp;					//P参数
  float Ki;					//I参数
  float Kd;					//D参数
		
  float Target;				//目标值
  float Measure;			//当前获取值
  float Error[3];			//三次误差
		
  float KpOut;				//比例输出
  float KiOut;				//积分输出
  float KdOut;				//微分输出
  float PID_Out;			//PID总输出
		
  uint32_t PID_Limit_MAX; 	//最大输出限幅
  uint32_t Ki_Limit_MAX;	//最大积分输出限幅
}pid_t;

float PID_Calculate(pid_t *pid, float Measure, float Target);
void Set_PID_Param(pid_t *pid, float P, float I, float D);
// PID限幅函数 *a传入要限幅的参数  ABS_MAX限幅大小
void PID_Limit(float *a, float ABS_MAX);
#endif /* PID_H */